package com.mycat.auth.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.mycat.auth.domain.AuthResource;
import com.mycat.auth.domain.RefRoleAuth;
import com.mycat.auth.dto.auth.MenuResourcesDTO;
import com.mycat.auth.dto.auth.ResourcesTreeDTO;
import com.mycat.auth.dto.auth.RoleAuthTreeDTO;

import java.util.List;

/**
 * @author roger.
 * @email luojie@yzworld.cn
 * @date 2016/10/9
 */
public interface AuthResourceService {

    void addResource(AuthResource resource);

    void delResource(Integer[] ids);

    void updateResource(AuthResource resource);

    AuthResource findResource(AuthResource resource);

    /**
     * 根据角色Id获取该角色下所有权限
     * @param roleIds 角色集合
     * @return List<AuthResource>资源集合
     */
    List<AuthResource> findPermissionByRoleIds(Integer... roleIds);

    /**
     * 根据角色ID获取该角色下所有页面资源
     * @param parentId 父节点Id
     * @param roleIds 角色集合
     * @return List<AuthResource>资源集合
     */
    List<MenuResourcesDTO> findPageResourcesByRoleIds(Integer parentId, Integer... roleIds);

    /**
     * 分页获取资源
     * @param page 分页数据
     * @param resource 查询条件
     * @return  PageInfo<AuthResource>
     */
    PageInfo<AuthResource> findResources(Page<AuthResource> page, AuthResource resource);

    /**
     * 根据父节点初始化资源树
     * @param parentId 父节点
     * @return  List<ResourcesDTO>
     */
    List<ResourcesTreeDTO> findResourceTree(Integer parentId);

    /**
     * 初始化角色授权树
     * @return   List<RoleAuthTreeDTO>
     */
    List<RoleAuthTreeDTO> findAuthTree();

    /**
     * 获取当前角色已经授权的资源Id集合
     * @param roleId 角色id
     *
     * @return List<RefRoleAuth>
     */
    List<RefRoleAuth> findRoleAuth(Integer roleId);
}
